#ifndef SIMPLELIST_H

#define SIMPLELIST_H

#include <stdlib.h> 

/*  ... My daddy is a handsome devil
	He's got a chain five miles long ... */

struct simpleList
{
	struct Node *HEAD;
	struct Node *TAIL;
	int length;
};

struct Node
{
	unsigned long DATA;
	struct Node *NEXT;
};

struct Vector
{
	unsigned long length;
	unsigned long *v;
};


// inicia a lista encadeada
// Retorna:
// 	- lista iniciada
struct simpleList *initList();


// adiciona um valor a uma lista
// Requer:
//	- lista encadeada
//	- valor a ser adicionado
void addToList(struct simpleList *L, unsigned long data);


// Libera a lista
// Requer:
//	- lista a ser liberada
void freeList(struct simpleList *L);


// inicia o vetor
// Requer:
//	- tamanho do vetor
// Retorna:
//	- vetor iniciado
struct Vector *initVector(unsigned long length);


// Copia uma lista para o vetor
// Requer:
//	- lista a ser copiada
// Retorna:
//	- vetor ja com os valores da lista
struct Vector *listToVector(struct simpleList *L);

// Libera o vetor
// Requer:
//	- vetor a ser liberado
void freeVector(struct Vector *V);

#endif
